home *** CD-ROM | disk | FTP | other *** search
- package netscape.plugin.composer.io;
-
- import java.io.CharArrayReader;
- import java.io.IOException;
- import java.io.Reader;
-
- public class LexicalStream {
- // $FF: renamed from: in netscape.plugin.composer.io.SlidingBuffer
- private SlidingBuffer field_0;
- private FooStringBuffer buffer;
- private static final String NEWLINE = new String("\n");
- private boolean bHaveClosedStream;
-
- public LexicalStream(String var1) {
- this((Reader)(new CharArrayReader(var1.toCharArray())));
- }
-
- public LexicalStream(Reader var1) {
- this.field_0 = new SlidingBuffer(var1);
- }
-
- private int read() throws IOException {
- return this.field_0.read();
- }
-
- private boolean lookAhead(char var1) throws IOException {
- return this.field_0.lookAhead(var1);
- }
-
- private boolean lookAhead(String var1) throws IOException {
- return this.field_0.lookAhead(var1);
- }
-
- private boolean lookAhead(String var1, boolean var2) throws IOException {
- return this.field_0.lookAhead(var1, var2);
- }
-
- private boolean eatNewline() throws IOException {
- return this.field_0.eatNewline();
- }
-
- private boolean eatWhiteSpace() throws IOException {
- return this.field_0.eatWhiteSpace();
- }
-
- public Token next() throws IOException {
- while(true) {
- int var1 = this.read();
- if (var1 >= 0) {
- if (var1 == 38) {
- if (this.buffer == null) {
- FooStringBuffer var2 = new FooStringBuffer();
- this.parseEntity(var2);
- return new Entity(var2);
- }
-
- this.field_0.unread(1);
- } else if (var1 == 60) {
- if (this.buffer == null) {
- if (this.field_0.lookAhead('/')) {
- return this.parseTag(false);
- }
-
- if (this.field_0.lookAhead('!')) {
- return this.parseComment();
- }
-
- return this.parseTag(true);
- }
-
- this.field_0.unread(1);
- } else if (var1 == 13) {
- if (this.buffer == null) {
- this.field_0.lookAhead('\n');
- return new Text(NEWLINE);
- }
-
- this.field_0.unread(1);
- } else {
- if (var1 != 10) {
- if (this.buffer == null) {
- this.buffer = new FooStringBuffer();
- }
-
- this.buffer.append((char)var1);
- continue;
- }
-
- if (this.buffer == null) {
- return new Text(NEWLINE);
- }
-
- this.field_0.unread(1);
- }
- }
-
- if (this.buffer != null) {
- String var3 = this.buffer.toString();
- this.buffer = null;
- return new Text(var3);
- }
-
- if (!this.bHaveClosedStream) {
- this.field_0.close();
- this.bHaveClosedStream = true;
- }
-
- return null;
- }
- }
-
- private boolean isWhitespace(char var1) {
- return Character.isSpace(var1);
- }
-
- private Token parseTag(boolean var1) throws IOException {
- FooStringBuffer var2 = new FooStringBuffer();
-
- while(true) {
- int var3 = this.read();
- if (var3 < 0 || var3 == 62 || this.isWhitespace((char)var3)) {
- if (var2.length() == 0) {
- var2.append('<');
- if (!var1) {
- var2.append('/');
- }
-
- if (var3 >= 0) {
- var2.append((char)var3);
- }
-
- return new Text(var2.toString());
- } else {
- Tag var4 = new Tag(var2.toString(), var1);
- if (var3 == 62) {
- return var4;
- } else {
- while(true) {
- var3 = this.read();
- if (var3 < 0 || var3 == 62) {
- return var4;
- }
-
- if (!this.isWhitespace((char)var3)) {
- this.field_0.unread(1);
- this.parseTagAttribute(var4);
- }
- }
- }
- }
- }
-
- var2.append((char)var3);
- }
- }
-
- private void parseTagAttribute(Tag var1) throws IOException {
- FooStringBuffer var2 = new FooStringBuffer();
-
- while(true) {
- int var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- if (var3 == 62 || var3 == 61) {
- this.field_0.unread(1);
- break;
- }
-
- if (this.isWhitespace((char)var3)) {
- break;
- }
-
- var2.append((char)var3);
- }
-
- if (var2.length() != 0) {
- this.eatWhiteSpace();
- int var5 = this.read();
- FooStringBuffer var4 = null;
- if (var5 != 61) {
- this.field_0.unread(1);
- } else {
- this.eatWhiteSpace();
- var5 = this.read();
- if (var5 >= 0) {
- if (var5 == 62) {
- this.field_0.unread(1);
- } else if (var5 != 39 && var5 != 34) {
- var4 = new FooStringBuffer();
- var4.append((char)var5);
-
- while(true) {
- var5 = this.read();
- if (var5 < 0) {
- break;
- }
-
- if (var5 == 62) {
- this.field_0.unread(1);
- break;
- }
-
- if (this.isWhitespace((char)var5)) {
- break;
- }
-
- var4.append((char)var5);
- }
- } else {
- var4 = this.parseQuotedString(var5);
- }
- }
- }
-
- var1.addAttribute(var2.toString(), var4 != null ? var4.toString() : null);
- }
- }
-
- private FooStringBuffer parseQuotedString(int var1) throws IOException {
- FooStringBuffer var2 = new FooStringBuffer();
-
- while(true) {
- int var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- if (var3 == 38) {
- if (this.field_0.peek() == 123) {
- this.read();
- this.parseJavaScriptEntity(var2);
- } else {
- this.parseEntity(var2);
- }
- } else {
- if (var3 == var1) {
- break;
- }
-
- var2.append((char)var3);
- }
- }
-
- return var2;
- }
-
- private Comment parseComment() throws IOException {
- FooStringBuffer var1 = new FooStringBuffer();
- boolean var2 = false;
- if (this.field_0.lookAhead('-')) {
- if (this.field_0.lookAhead('-')) {
- var2 = true;
- } else {
- var1.append('-');
- }
- }
-
- while(true) {
- int var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- if (var2) {
- if (var3 == 45 && this.field_0.lookAhead('-')) {
- if (this.field_0.lookAhead('>')) {
- break;
- }
-
- var1.append("--");
- }
- } else if (var3 == 62) {
- break;
- }
-
- var1.append((char)var3);
- }
-
- return var2 ? new Comment("--" + var1 + "--") : new Comment(var1);
- }
-
- private void parseEntity(FooStringBuffer var1) throws IOException {
- while(true) {
- int var2 = this.read();
- if (var2 < 0 || var2 == 59) {
- return;
- }
-
- if (this.isWhitespace((char)var2)) {
- this.field_0.unread(1);
- return;
- }
-
- var1.append((char)var2);
- }
- }
-
- private void parseJavaScriptEntity(FooStringBuffer var1) throws IOException {
- int var2 = 1;
-
- while(true) {
- int var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- if (var3 != 39 && var3 != 34) {
- if (var3 == 123) {
- var1.append((char)var3);
- ++var2;
- } else if (var3 == 125) {
- --var2;
- if (var2 == 0) {
- this.field_0.lookAhead(';');
- return;
- }
-
- var1.append((char)var3);
- } else if (var3 == 47) {
- var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- if (var3 == 42) {
- this.parseCComment(var1);
- } else if (var3 == 47) {
- this.parseEOLComment(var1);
- } else {
- var1.append('/');
- var1.append((char)var3);
- }
- } else {
- var1.append((char)var3);
- }
- } else {
- this.parseJavaScriptQuotedString(var1, var3);
- }
- }
-
- }
-
- private void parseJavaScriptQuotedString(FooStringBuffer var1, int var2) throws IOException {
- var1.append((char)var2);
-
- while(true) {
- int var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- var1.append((char)var3);
- if (var3 == 92) {
- var3 = this.read();
- if (var3 < 0) {
- break;
- }
-
- var1.append((char)var3);
- } else if (var3 == var2) {
- return;
- }
- }
-
- }
-
- private void parseCComment(FooStringBuffer var1) throws IOException {
- var1.append("/*");
-
- while(true) {
- int var2 = this.read();
- if (var2 < 0) {
- break;
- }
-
- var1.append((char)var2);
- if (var2 == 42) {
- var2 = this.read();
- if (var2 < 0) {
- break;
- }
-
- var1.append((char)var2);
- if (var2 == 47) {
- return;
- }
- }
- }
-
- }
-
- private void parseEOLComment(FooStringBuffer var1) throws IOException {
- var1.append("//");
-
- int var2;
- do {
- var2 = this.read();
- if (var2 < 0) {
- return;
- }
-
- var1.append((char)var2);
- } while(var2 != 10 && var2 != 13);
-
- var1.append((char)var2);
- }
- }
-